(function () {
      //如果给一个DOM元素绑定了ID，那他就成为了window下的属性，可以直接用 window.id名 访问
      //获取相应的DOM元素
      //获取全选框
      var checkAll = document.querySelector('.checkAll');
      //获取其他单选框
      var checkList = document.querySelectorAll('td input[type="checkbox"]');
      //获取thead内的标题
      var titleBtns = document.querySelectorAll('thead th');
      //获取tbody下所有的tr
      var trs = document.querySelectorAll('tbody tr');
      //将获取到的trs转为数组，因为只有数组才有sort方法
      var arr = Array.prototype.slice.apply(trs);
      //获取tbody
      var tbody = document.querySelector('tbody');

      //程序的入口函数的定义
      var init = function () {
        //调用事件绑定函数
        initEvents();
      }

      //事件绑定函数
      var initEvents = function () {
        //1.实现全选功能
        checkAll.addEventListener('click', onClickCheckAll);

        //2.实现如果所有单选框都选中，那么全选框也要选中，且有一个单选框未选中，全选框也取消选中状态
        checkList.forEach(function (checkBox) {
          checkBox.addEventListener('click', onClickCheckOne);
        });

        //3.实现排序功能
        titleBtns.forEach(function (titleBtn, index) {
          titleBtn.addEventListener('click', onClickSort.bind(titleBtn, index))
        })

      }

      //全选功能函数
      var onClickCheckAll = function () {
        var status = checkAll.checked;
        checkList.forEach(function (checkBox) {
          checkBox.checked = status;
        });
      }

      //实现如果所有单选框都选中，那么全选框也要选中，且有一个单选框未选中，全选框也取消选中状态
      var onClickCheckOne = function () {
        var checkedNum = 0;

        checkList.forEach(function (checkBox) {
          if (checkBox.checked) {
            checkedNum++;
          }
        })
        if (checkedNum === checkList.length) {
          checkAll.checked = true;
        } else {
          checkAll.checked = false;
        }
      }

      var onClickSort = function (index) {
        if (index === 0) {
          return;
        }
        arr.sort(function (a, b) {
          if (index === 1 || index === 3) { //处理数字的排序
            return a.querySelectorAll('td')[index].innerHTML - b.querySelectorAll('td')[index].innerHTML;
          } else { //处理汉字的排序
            return a.querySelectorAll('td')[index].innerHTML.localeCompare(b.querySelectorAll('td')[index].innerHTML, 'zh')
          }
        })
        //将排序完成后的arr数组显示到页面上
        arr.forEach(function (node) {
          tbody.appendChild(node);
        })
      }

      //调用入口函数
      init();
    }
)();